/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;

import com.persistencia.domain.Ciclo;
import com.persistencia.domain.Facultad;
import com.service.CicloService;
import com.service.impl.CicloServiceImpl;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author SHERLY
 */
@ManagedBean
@ViewScoped
public class CicloController {

    private Ciclo ciclo;
    private Ciclo cicloSeleccionado;
    private List<Ciclo> listaCiclo;
    private CicloService cicloService;
    private String nombre;
    private String estado;
    private String NFctId;
    
    public CicloController() {
        ciclo = new Ciclo();
        cicloSeleccionado = new Ciclo();
        listaCiclo = new ArrayList<Ciclo>();
        cicloService = new CicloServiceImpl();
        nombre = "";
        listarCiclo();
    }
    
    private void listarCiclo(){
        try{
            System.out.println("Entramos a listar ciclo");
            listaCiclo = cicloService.obtenerListaCiclo();           
        } catch (Exception ex) {
            Logger.getLogger(CicloController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void consultarCiclo(){
        try{
            listarCiclo();
        } catch (Exception ex) {
            Logger.getLogger(CicloController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void grabarCiclo(){
        FacesMessage msg = null;
        try{
            if(ciclo!=null){
               System.out.println("Entramos a crear ciclo");
               
                System.out.println("Nombre :"+ciclo.getVNombre());
                System.out.println("Fecha Inicio :"+ciclo.getDtFchIni());
                System.out.println("Fecha Fin :"+ciclo.getDtFchFin());
                ciclo.setNFctId(new Facultad(Integer.parseInt(NFctId)));
                cicloService.registrarCiclo(ciclo);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Inserción","El Ciclo se creo satisfactoriamente.");
                
                ciclo = new Ciclo();
                listarCiclo(); 
            }else{
                System.out.println("El ciclo es nulo");
            }
            
        } catch (Exception ex) {
            Logger.getLogger(CicloController.class.getName()).log(Level.SEVERE, null, ex);
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Inserción","No se registro el ciclo.");
        }
        finally{
            
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    //<editor-fold defaultstate="collapsed" desc="OPERACIONES">        
    
    public void terminarCiclo(){
        if( cicloSeleccionado != null ){
            try {
                System.out.println("Entramos a terminar");          
                    System.out.println("ciclo Seleccionado:"+cicloSeleccionado.getNCicId());
                
                    cicloSeleccionado.setVEstado("0");
                    cicloService.actualizarCiclo(cicloSeleccionado);
                    FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Cierre de Ciclo","El Ciclo ha sido cerrado satisfactoriamente.");
                    FacesContext.getCurrentInstance().addMessage(null, msg);                                
            } catch (Exception ex) {
                Logger.getLogger(CicloController.class.getName()).log(Level.SEVERE, null, ex);
            }
       }else{
            System.out.println("No se ha seleccionado un Ciclo");
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Cierre de Ciclo","Debe seleccionar un Ciclo.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
    
    public SelectItem[] getItemsCicloSelectOne(){
        try {
            System.out.println("getItemsCicloSelectOne");
            
            return getSelectItems(cicloService.obtenerListaCiclo());
        } catch (Exception ex) {
            Logger.getLogger(CicloController.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
        
    }
    
    private SelectItem[] getSelectItems(List<Ciclo> listaCiclo) {
        SelectItem[] items = new SelectItem[listaCiclo.size()];
        int i = 0;
        for (Ciclo objCiclo : listaCiclo) {
            items[i++] = new SelectItem(objCiclo.getNCicId(), objCiclo.getVNombre());
        }
        return items;
    }
    
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="GETTER and SETTER">        
    
    public Ciclo getCiclo() {
        return ciclo;
    }

    public void setCiclo(Ciclo ciclo) {
        this.ciclo = ciclo;
    }

    public Ciclo getCicloSeleccionado() {
        return cicloSeleccionado;
    }

    public void setCicloSeleccionado(Ciclo cicloSeleccionado) {
        this.cicloSeleccionado = cicloSeleccionado;
    }

    public CicloService getCicloService() {
        return cicloService;
    }

    public void setCicloService(CicloService cicloService) {
        this.cicloService = cicloService;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public List<Ciclo> getListaCiclo() {
        return listaCiclo;
    }

    public void setListaCiclo(List<Ciclo> listaCiclo) {
        this.listaCiclo = listaCiclo;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    public String getNFctId() {
        return NFctId;
    }

    public void setNFctId(String NFctId) {
        this.NFctId = NFctId;
    }
 
    //</editor-fold>
   
}